entry: Avoid recursion in gtk_entry_ensure_layout
authorMatthias Clasen <mclasen@redhat.com>
Mon, 14 Nov 2016 20:17:41 +0000 (15:17 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 14 Nov 2016 20:17:41 +0000 (15:17 -0500)
This was unintentional, and lead to a memory leak.

gtk/gtkentry.c

index b57a1acdd9b6c852c30c0b16eb91e686152f47b6..151de5443da050eab00e3634b6728a9607b3ca17 100644 (file)
@@ -7151,6 +7151,7 @@ gtk_entry_set_buffer (GtkEntry       *entry,
 {
   GtkEntryPrivate *priv;
   GObject *obj;
+  gboolean had_buffer = FALSE;
 
   g_return_if_fail (GTK_IS_ENTRY (entry));
 
@@ -7164,6 +7165,7 @@ gtk_entry_set_buffer (GtkEntry       *entry,
 
   if (priv->buffer)
     {
+      had_buffer = TRUE;
       buffer_disconnect_signals (entry);
       g_object_unref (priv->buffer);
     }
@@ -7184,8 +7186,11 @@ gtk_entry_set_buffer (GtkEntry       *entry,
   g_object_notify_by_pspec (obj, entry_props[PROP_INVISIBLE_CHAR_SET]);
   g_object_thaw_notify (obj);
 
-  gtk_editable_set_position (GTK_EDITABLE (entry), 0);
-  gtk_entry_recompute (entry);
+  if (had_buffer)
+    {
+      gtk_editable_set_position (GTK_EDITABLE (entry), 0);
+      gtk_entry_recompute (entry);
+    }
 }
 
 /**